import json

def load_json_file(file_path):
    """从文件中加载JSON数据"""
    with open(file_path, 'r', encoding='utf-8') as file:
        return json.load(file)

def match_pattern(node, patterns):
    """在AST节点中进行模式匹配"""
    for pattern in patterns:
        # 如果模式中定义了具体的类型
        if 'type' in pattern:
            if isinstance(node, pattern['type']):
                return True
        # 进一步递归匹配
        if 'fields' in node:
            for field_value in node['fields'].values():
                if isinstance(field_value, dict):
                    if match_pattern(field_value, patterns):
                        return True
                elif isinstance(field_value, list):
                    for item in field_value:
                        if isinstance(item, dict):
                            if match_pattern(item, patterns):
                                return True
    return False

def analyze_ast(ast_data, patterns):
    """分析AST并匹配指定的模式"""
    matched = match_pattern(ast_data, patterns)
    return matched

def main(json_file_path):
    # 定义木马后门的模式（这里是一个简单示例，你需要根据实际需求定义具体的模式）
    patterns = [
        {'type': dict},  # 例如，查找字典类型的节点（根据实际AST结构调整）
    ]

    # 加载JSON文件
    ast_data = load_json_file(json_file_path)

    # 分析AST并进行模式匹配
    is_malicious = analyze_ast(ast_data, patterns)
    
    if is_malicious:
        print("检测到木马后门模式！")
    else:
        print("未检测到木马后门模式。")

if __name__ == "__main__":
    json_file_path = 'D:/python1/AST/hello_ast.json'  # JSON文件的实际路径
    main(json_file_path)
